<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script lang="javascript">
   let a= [2,4,1,7,3,4,8,9,5];

   function bubbleSort(arr){
    // 比较相邻两个数，大于交互位置
    const len = arr.length;
    for(let i=0;i<len-1;i++){
      // i表示跑i圈
      for(let j=0;j<len-i-1;j++){
        // 比较相邻两个数大小
        if(arr[j]>arr[j+1]){
          let temp = arr[j];
          arr[j]=arr[j+1];
          arr[j+1]=temp;
        }
      }
    }
    return arr;
   }
   function chooseSort(arr){
    // 在数组中找到最小的元素，将它和数组第一个元素交换位置；在剩下的元素中找到最小的元素，将它和数组的第二个元素交换位置，循环往复，直到结束；
    const len =arr.length;
    for(let i=0;i<len;i++){
      // 寻找len圈最小元素
      let minIndex  = i;
      for(let j=i+1;j<len;j++){
        // 寻找第i圈最小元素的位置
        if(arr[minIndex]>arr[j]){
          minIndex  = j;
        }
      }
      if(minIndex!==i){
        // 最小元素的位置不是初始位置，交互位置
        const temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] =temp;
      }
    }
    return arr;
   }
   function insertSort(arr){
    // 通过构建有序数列，对于未排序的数据，在已经排序的序列中从后向前扫描，找到相应位置并插入；
    const len  = arr.length;
    let j,temp;
    for(let i=1;i<len;i++){
      j=i-1;
      temp= arr[i];
      while(j>=0&&arr[j]>temp){
        arr[j+1]=arr[j];
        j--;
      }
      arr[j+1]=temp;
    }
    return arr;
   }
   function quickSort(arr){
    // 取一个基准值，比基准值小的在左边，大的在右边，左右继续这样的操作，最后合并；
    if(len<=1) return arr;
    let mid  = arr[0]
    let left =[];
    let right=[];
    for(let i=1;i<arr.length;i++){
      if(arr[i]<=mid){
        left.push(arr[i]);
      }else{
        right.push(arr[i]);
      }
    }
    return quickSort(left).concat([mid],quickSort(right));
   }
  // let b = bubbleSort(a);
  // console.log(b);
  // let c = chooseSort(a);
  // console.log(c);
  // let d = insertSort(a);
  // console.log(d);
  let e = quickSort(a);
  console.log(e);
  (function(参数){}())
  (function(参数){})()
  !function(参数){}()
  </script>
 
</body>
</html>